package openIDService;

import javax.servlet.http.HttpServletRequest;

import models.User;

import org.openid4java.association.AssociationException;
import org.openid4java.consumer.ConsumerException;
import org.openid4java.discovery.DiscoveryException;
import org.openid4java.message.MessageException;

/**
 * Questa classe e' utilizzata per verificare se l'utente e' gia' autorizzato
 * all'accesso all'area riservata del forum.
 * 
 */
public class VerifyUser {

	private User identity;
	private boolean isAuthorized = false;

	/**
	 * 
	 * @param request
	 *            L'oggetto {@link HttpServletRequest} in arrivo dal client.
	 *            Necessario per leggere l'attributo "identity" della sessione
	 *            il quale, se esistente, DEVE essere un oggetto @link
	 *            {@link User}.
	 */
	public VerifyUser(HttpServletRequest request) {

		identity = (User) request.getSession().getAttribute("identity");

		if (identity == null) {
			OpenIDService verify = new Verification();

			try {
				identity = verify.execute(request, null);
			} catch (DiscoveryException e) {
				isAuthorized = false;
			} catch (MessageException e) {
				isAuthorized = false;
			} catch (ConsumerException e) {
				isAuthorized = false;
			} catch (AssociationException e) {
				isAuthorized = false;
			}

			identity = (User) request.getSession().getAttribute("identity");
		}
	}

	/**
	 * Controlla se l'utente salvato nella sessione e' autorizzato a visualizzare il
	 * forum.
	 * 
	 * @return
	 */
	public boolean isAuthorized() {

		if (identity != null) {
			isAuthorized = true;
		} else {
			isAuthorized = false;
		}

		return isAuthorized;
	}
}